fix(napi): improve error propagation #1303
Merged
+106
−53
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This enables
napi::Error
to wrap an arbitrary JavaScript value, which may have been returned or thrown from a function. This is useful for functions that must return annapi::Result
, but may have an error propagated from calling a JavaScript function. The support was partially already there for the Promise implementation, but I've extended it.This also checks if an exception is pending after calling a JS function, and retrieves it with
napi_get_and_clear_last_exception
. This way, the pending exception isn't necessarily immediately thrown when returning from the native function, but can be passed elsewhere if needed (e.g. to an error callback). This is also important when calling JS functions outside the native call context (e.g. from a background thread).